#include "StdAfx.h"
#include <stdlib.h>
#include <string.h>
#include <vector>
#include "Archivo.h"
using namespace std;
using namespace System;
using namespace Microsoft::Office::Interop::Excel;
Archivo::Archivo(void)
{
}
Archivo::~Archivo(void)
{
	
}
TProfesor Archivo::ProfesorObtener(char *ArchivoNombre)
{
	Application ^xlApp=gcnew Application();
	System::String^ sArchivoNombre= gcnew System::String(ArchivoNombre);
	Workbook ^xlWorkbook=xlApp->Workbooks->Open(sArchivoNombre, 0, true, 5, "", "", true, Microsoft::Office::Interop::Excel::XlPlatform::xlWindows, "\t", false, false, 0, true, 1, 0); 
	Worksheet ^xlWorksheet = (Worksheet ^)xlWorkbook->Sheets[1];
	Range ^xlRange = xlWorksheet->UsedRange;

	int rowCount = xlRange->Rows->Count;
	int colCount = xlRange->Columns->Count;

	TProfesor objTProfesor;

	//Nombres
	Object ^rangeObject = xlRange->Cells[1, 2];
	Range ^range = (Range^ )rangeObject;
	Object ^rangeValue = range->Value2;
	if(rangeValue)
	{
		strcpy(objTProfesor.nombre,(char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(rangeValue->ToString()).ToPointer());
	}
	
	//Apellidos
	rangeObject = xlRange->Cells[2, 2];
	range = (Range^ )rangeObject;
	rangeValue = range->Value2;
	if(rangeValue)
	{
		strcpy(objTProfesor.apellido,(char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(rangeValue->ToString()).ToPointer());
	}
	
	int veci=0;
	for(int j=2; j<=8; j++)
	{
		vector<int> vecHora;
		objTProfesor.horario.push_back(vecHora);
		for(int i=6; i<=21; i++)
		{
			Object ^rangeObject = xlRange->Cells[i, j];
			Range ^range = (Range^ )rangeObject;
			Object ^rangeValue = range->Value2;
			if(rangeValue)
			{
				String ^cellValue = rangeValue->ToString();
				objTProfesor.horario.at(veci).push_back(0);
			}
			else
			{
				String ^cellValue ="No Disponible";
				objTProfesor.horario.at(veci).push_back(-1);
			}
		}
		veci++;
	}

	//Asignaturas
	for(int i=25; i<=rowCount; i++)
	{
		TAsignatura objTAsignatura;

		Object ^rangeObject = xlRange->Cells[i, 1];
		Range ^range = (Range^ )rangeObject;
		Object ^rangeValue = range->Value2;
		if(rangeValue)
		{
			strcpy(objTAsignatura.nombre,(char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(rangeValue->ToString()).ToPointer());
		}

		rangeObject = xlRange->Cells[i, 2];
		range = (Range^ )rangeObject;
		rangeValue = range->Value2;
		if(rangeValue)
		{
			strcpy(objTAsignatura.seccion,(char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(rangeValue->ToString()).ToPointer());
		}

		rangeObject = xlRange->Cells[i, 3];
		range = (Range^ )rangeObject;
		rangeValue = range->Value2;
		if(rangeValue)
		{
			objTAsignatura.CantidadHoras=int::Parse(rangeValue->ToString());
		}

		objTProfesor.asignaturas.push_back(objTAsignatura);
	}

	return objTProfesor;
}
TAula Archivo::AulaObtener(char *ArchivoNombre)
{
	Application ^xlApp=gcnew Application();
	System::String^ sArchivoNombre= gcnew System::String(ArchivoNombre);
	Workbook ^xlWorkbook=xlApp->Workbooks->Open(sArchivoNombre, 0, true, 5, "", "", true, Microsoft::Office::Interop::Excel::XlPlatform::xlWindows, "\t", false, false, 0, true, 1, 0); 
	Worksheet ^xlWorksheet = (Worksheet ^)xlWorkbook->Sheets[1];
	Range ^xlRange = xlWorksheet->UsedRange;

	int rowCount = xlRange->Rows->Count;
	int colCount = xlRange->Columns->Count;

	TAula objTAula;

	Object ^rangeObject = xlRange->Cells[1, 2];
	Range ^range = (Range^ )rangeObject;
	Object ^rangeValue = range->Value2;
	if(rangeValue)
	{
		strcpy(objTAula.nombre,(char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(rangeValue->ToString()).ToPointer());
	}

	int veci=0;
	int CantHorasDisponibles=0;
	for(int j=2; j<=8; j++)
	{
		vector<int> vecHora;
		objTAula.horario.push_back(vecHora);
		for(int i=5; i<=20; i++)
		{
			Object ^rangeObject = xlRange->Cells[i, j];
			Range ^range = (Range^ )rangeObject;
			Object ^rangeValue = range->Value2;
			if(rangeValue)
			{
				String ^cellValue = rangeValue->ToString();
				objTAula.horario.at(veci).push_back(0);
				CantHorasDisponibles++;
			}
			else
			{
				String ^cellValue ="No Disponible";
				objTAula.horario.at(veci).push_back(-1);
			}
		}
		veci++;
	}
	objTAula.HorasDisponibles=CantHorasDisponibles;
	return objTAula;
}
void Archivo::ArchivoCrear(MasterClass *objMasterClass, char *Directorio)
{
	for(int a=0;a<objMasterClass->AulaCantidad();a++)
	{
		TAula objTAula=objMasterClass->AulaObtener(a);

		Application ^xlApp;
		Workbook ^xlWorkbook;
		Worksheet ^xlWorkSheet;
		Object ^misValue = System::Reflection::Missing::Value;
	
		xlApp=gcnew ApplicationClass();
		xlWorkbook=xlApp->Workbooks->Add(misValue);
		xlWorkSheet=(Worksheet ^)xlWorkbook->Sheets[1];
		Range ^xlRange = xlWorkSheet->UsedRange;
		xlRange->Cells[1, 1] = "Aula";
		xlRange->Cells[1, 2] = gcnew String(objTAula.nombre);

		int hora=7;
		for(int i=5;i<=20;i++)
		{
			xlRange->Cells[i, 1]=String::Format("{00}",hora)+":00 - "+String::Format("{00}",hora+1)+":00";
			hora++;
		}
		xlRange->Cells[4, 2]="Lunes";
		xlRange->Cells[4, 3]="Martes";
		xlRange->Cells[4, 4]="Miercoles";
		xlRange->Cells[4, 5]="Jueves";
		xlRange->Cells[4, 6]="Viernes";
		xlRange->Cells[4, 7]="Sabado";
		xlRange->Cells[4, 8]="Domingo";
		int f=0,c=0;
		for(int j=2; j<=8; j++)
		{
			f=0;
			for(int i=5; i<=20; i++)
			{
				if(objTAula.horario[c][f]==-1)
					xlRange->Cells[i, j]="";
				else  if(objTAula.horario[c][f]==0)
					xlRange->Cells[i, j]="Disponible";
				else
				{
					TCurso objTCurso= objMasterClass->CursoObtener(objTAula.horario[c][f]);
					xlRange->Cells[i, j]="Seccion: "+gcnew String(objTCurso.asignatura.seccion)+"\n"+"Profesor: "+gcnew String(objTCurso.profesor.nombre)+"\n"+ "Asignatura: "+gcnew String(objTCurso.asignatura.nombre);
				}
				f++;
			}
			c++;
		}
		String ^sNombre= gcnew String(objTAula.nombre);
		String ^sDirectorio=gcnew String(Directorio);

		xlWorkbook->SaveAs(sDirectorio+"\\"+sNombre,XlFileFormat::xlWorkbookNormal,misValue, misValue, misValue, misValue, XlSaveAsAccessMode::xlExclusive, misValue, misValue, misValue, misValue,misValue);
		xlWorkbook->Close(true, misValue, misValue);
		xlApp->Quit();
	}
}